package com.bang.framework.mq.service;

import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;

/**
 * @ClassName: ReliableDeliveryService
 * @author: BANG
 * @Date: 2019/12/09 18:02
 * @Version: 1.0
 * @Modified By:
 * @Desc: 可靠性消息投递接口,保证消息的可靠性投递
 *
 *
 *
 */
public interface ReliableDeliveryService extends RabbitTemplate.ConfirmCallback,RabbitTemplate.ReturnCallback {
    /**
     * 发送消息到rabbitmq消息队列
     *
     * @param message   消息内容
     * @param routerKey 队列交换绑定的路由键
     * @throws Exception
     */
    <T> void  send(T message, CorrelationData correlationData, String routerKey) throws Exception;

    /**
     * 发送消息到rabbitmq消息队列
     *
     * @param message   消息内容
     * @param exchange  队列交换
     * @param routerKey 队列交换绑定的路由键
     * @throws Exception
     */
    <T> void send(T message, CorrelationData correlationData,String exchange, String routerKey) throws Exception;


    /**
     * 发送延迟消息
     *
     * @param messageContent 消息内容
     * @param correlationData 全局唯一CorrelationData对象,保证消息唯一性
     * @param exchange       队列交换
     * @param routerKey      队列交换绑定的路由键
     * @param delayTimes     延迟时长，单位：毫秒
     */
    <T> void sendTtlMessage(T messageContent,CorrelationData correlationData, String exchange, String routerKey, final long delayTimes) throws Exception;
}
